死锁与饥饿的区别?
死锁和饥饿都是在多处理操作系统或分布式系统中的相关概念,它们会导致一个或多个线程或进程陷入等待其所需资源的状态。
定义不同
死锁和饥饿都是相关的概念,它们阻止公平的系统调度,在该调度中阻止进程访问资源。顾名思义,死锁是指一组线程或进程被阻塞的情况,因为每个进程都在等待获取另一进程持有的资源,从而导致程序停止运行的死锁情况。另一方面,饥饿是由死锁触发的,死锁会导致进程冻结,因为低优先级进程被拒绝访问分配给高优先级进程的资源。
条件不同
死锁是指当线程或进程进入等待周期时发生的特定条件,因为它所请求的系统资源由另一个进程持有,而另一个进程又在等待另一个进程释放其资源从而创建死锁。这是由于资源利用率不高引起的。饥饿是无限期的延迟条件,由于资源被分配给另一个高优先级进程,因此低优先级进程被拒绝访问其所需的资源。这是一个资源管理问题,迫使系统仅将资源分配给高优先级进程。
表征不同
死锁是同时发生以下四个条件时导致的饥饿的最终形式:互斥,无抢占,保留和等待以及循环等待。死锁条件仅在所有四个条件都成立的系统中发生。饥饿是根据不同的条件而发生的,例如,当没有足够的资源可以使用时,进程的优先级开始降低,或者当进程开始将资源移交给其他进程而无法控制时。如果低优先级进程请求为高优先级进程保留的资源,则该进程将永远饿死。当任意分配资源导致进程等待更长的时间时,也会发生饥饿。
预防不同
可以通过对优先级队列使用适当的调度算法来防止饥饿,实际上它也使用了老化技术–一种调度技术,该算法将老化因子添加到每个请求的优先级中,这意味着它增加了一直在等待的低优先级进程的优先级需很长时间。另外,为计划提供更多资源应避免资源持续拥挤。为防止系统陷入僵局,必须拒绝进程访问一个或多个资源,同时等待其他资源,并且一次只能允许一个进程访问资源。